// ============================== 导入依赖 ============================== //

import CORE from '@/CORE'
import mixPath from '../mixPath'
import mixParam from '../param/mixParam'
import mixForm from '../form/mixForm'

// ============================== 导出混合 ============================== //

export default {
  /**
   * 混入列表 (配置选项合并)
   */
  mixins: [mixPath],

  /**
   * 属性注册 (抽取以便查阅)
   */
  props: CORE.WEB.SuperCommon,

  /**
   * 状态数据 (函数返回对象)
   */
  data() {
    return mixForm.data()
  },

  /**
   * 计算属性 (慎用箭头函数)
   */
  computed: {
    /**
     * 父级的 Web 组件
     */
    parentWeb: mixParam.computed.parentWeb,

    /**
     * 模块路径
     */
    path: mixParam.computed.path,

    /**
     * 绑定列表
     */
    bindList: mixParam.computed.bindList,

    /**
     * 数据列表
     */
    valueList: mixForm.computed.valueList,

    /**
     * 是否为多个绑定
     */
    isMulti: mixParam.computed.isMulti,

    /**
     * 所属对象
     */
    obj: mixParam.computed.obj,

    /**
     * 属性名称
     */
    prop: mixParam.computed.prop,

    /**
     * 尺寸
     */
    size: mixForm.computed.size,

    /**
     * 宽度样式类
     */
    widthClass: mixForm.computed.itemClass,

    /**
     * 宽度样式对象
     */
    widthStyle: mixForm.computed.itemStyle,

    /**
     * 是否已禁用
     */
    isDisabled: mixParam.computed.isDisabled,

    /**
     * 占位提示
     */
    placeholder: mixParam.computed.placeholder,

    /**
     * 公共属性
     */
    commonProps: mixParam.computed.commonProps,

    /**
     * 是否自动查询
     */
    isAuto() {
      const { parentWeb, autoSearch } = this
      return parentWeb.$props.superAutoSearch && autoSearch
    },

    /**
     * 是否进行参数重置
     */
    isReset() {
      const { parentWeb } = this
      return parentWeb.isReset || false
    },

    /**
     * 参数属性
     */
    superProps() {
      const { widthClass, widthStyle } = this
      return {
        key: this.$options.name,
        class: `CoreWeb-SearchSuper ${widthClass}`,
        style: widthStyle,
      }
    },

    /**
     * 标签属性
     */
    labelProps() {
      const { superLabelWidth, parentWeb, getSize } = this
      const width = superLabelWidth || parentWeb.superLabelWidth
      const style = {}
      if (width) style.width = getSize(width)
      return { style }
    },
  },

  /**
   * 监听属性 (深度 deep 首次 immediate)
   */
  watch: mixForm.watch,

  /**
   * 创建完成 (先抽取再调用)
   */
  created: mixForm.created,

  /**
   * 本地方法 (轻量重要在前)
   */
  methods: {
    /**
     * 是否不等 (可覆盖)
     */
    isDiff: mixParam.methods.isDiff,

    /**
     * 设置内部绑定值 (可覆盖)
     */
    setModel: mixParam.methods.setModel,

    /**
     * 获取最终回传值 (可覆盖)
     */
    getValue: mixParam.methods.getValue,

    /**
     * 是否相等 (可覆盖)
     */
    equals: mixParam.methods.equals,

    /**
     * 提交改变 (可覆盖)
     */
    emitChange: mixParam.methods.emitChange,

    /**
     * 提交改变 (可覆盖)
     */
    afterEmit: mixParam.methods.afterEmit,

    /**
     * 重置数据 (可覆盖)
     */
    resetModel() {
      const { EMPTY } = this
      this.model = EMPTY
    },
  },
}
